home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
asmutil
/
asm_n_z.zip
/
RES86B.ASM
< prev
next >
Wrap
Assembly Source File
|
1985-08-02
|
37KB
|
2,302 lines
; Here is the second half of the RESOURCE program source
page 60,132
code segment byte public
assume cs:code,ds:code
extrn start:near,hsym:near,nwln0:near,delim:near,cmerr:near
extrn nxcmd:near
extrn fcb:word,tbuf:word
public stack,wfiflg,quiflg,segflg,trmflg,segsho,opdtyp,segmsk,insloc
public ofsptr,curpar,segsiz,dmpstt,dmpcnt,dmpend,curofs,wrtflg
public ascbld,liscnt,cntenb,lastwd,doctbl,pcntr,rplptr,ecnt,xcptr
public nxtctl,symtp,docend,ctlbas,fndadd,fndpc,nrsegs,mcbsiz
public cofset,sdflg,ctltop,typndx,xcsw,hiload,symtyp,mcbbas,fake_comtbl
public bdos,initbl,typech,gtcmd,cmdbuf,cmentr,flushf,prtstr,pstrg
public cmkill,prword,gtval,pstg,typech,xo0,crlf,gtval,symbas,prntde
public xo,addfn,keychk,cofset,prspc,pstar,lngth,locsym,ifasci
public semic,dline,dcrlf,adb,strcnt,litall,cmpstr,litcmd,litdoc
public litctl,litsym,fopen,cstbl,segnam,fclose,rdfchr,creatf
public wtfchr,lita86,hexl,hexr,symluk,rdfchr,semic,tabc
;
;
;
dline: cmp nlblfg,0
jnz l11b9
cmp segval,0
jz l11b6
cmp pfxcnt,0
jnz l11b6
mov segval,0 ;clr segval
call pstg
db 0ah,0dh,';ILLEGAL SEGMENT OVERRIDE '
db 'ATTEMPTED !',0ah,0dh,0
l11b6: mov al,segmsk
mov opdtyp,al
call hsym
mov bx,rplptr
mov al,bh
or al,bl
jz l11b9
mov ch,byte ptr [bx]
inc bx ;skip the *
dec ch
call nwln0 ;print replacing line with comment
mov al,0ffh
mov replsw,al
l11b9: dec pfxcnt
mov es,curpar
mov nlblfg,0
mov opdtyp, 04h ;ds is most likely
mov pfflg,al
mov dx,pcntr
mov bx,curofs
add bx,dx
mov curadr,bx
inc dx
mov pcntr,dx
mov ch,es:byte ptr [bx] ;opcode byte in ch
mov cinstr,ch
mov bx,offset opct-7
mov dx,7 ;size of table item -1
l11e3: add bx,dx
mov al,cs:byte ptr [bx]
or al,al
jnz l11ee
jmp pdbbyt ;end of table
;
l11ee: and al,ch
mov cl,al ;masked opcode
inc bx
mov al,cs:byte ptr [bx]
cmp al,cl ;test against pattern
jnz l11e3
inc bx
mov al,cs:byte ptr [bx] ;instr type index
mov byte ptr typndx,al
mov ch,5 ;size of literal
lopclp: inc bx
mov al,cs:byte ptr [bx]
cmp al,'.' ;dot to be ignored
jz nodot
call typech ;output literal opcode
nodot: dec ch
jnz lopclp
mov dl,byte ptr typndx
and dl,3fh
mov dh,0
mov bx,offset jmptbl
add bx,dx
add bx,dx
mov dx,cs:[bx]
mov bx,curadr
jmp dx
;
;
jmptbl dw offset kind00
dw offset kind01
dw offset kind02
dw offset kind03
dw offset kind04
dw offset kind05
dw offset kind06
dw offset kind07
dw offset kind08
dw offset kind09
dw offset kind10
dw offset kind11
dw offset kind12
dw offset kind13
dw offset kind14
dw offset kind15
dw offset kind16
dw offset kind17
dw offset kind18
dw offset kind19
dw offset kind20
dw offset kind21
dw offset kind22
dw offset kind23
dw offset kind24
dw offset kind25
dw offset kind26
dw offset kind27
dw offset kind28
dw offset kind29
dw offset kind30
dw offset kind31
dw offset kind32
dw offset kind33
dw offset kind34
dw offset kind35
dw offset kind36
dw offset kind37
dw offset kind38
dw offset kind39
;
;
;
kind00: jmp dcrlf ;opcode only
;
kind01: call tabc ;in/out
mov al,es:[bx]
test al,2
jnz k01out
test al,1
jnz k01iw
call pstg
db 'AL,DX',0
jmp dcrlf
;
k01iw: call pstg
db 'AX,DX',0
jmp dcrlf
;
k01out: test al,1
jnz k01ow
call pstg
db 'DX,AL',0
jmp dcrlf
;
k01ow: call pstg
db 'DX,AX',0
jmp dcrlf
;
kind02: inc pcntr
call tabc
mov al,es:[bx]
test al,2
jnz k02mtr
call pstg
db 'AX,',0
jmp l139b
;
k02mtr: inc curadr
mov bx,curadr
mov al,es:[bx]
call psmnum
call pstg
db ',AX',0
jmp dcrlf
;
kind37: inc pcntr
call tabc
inc bx
mov al,es:[bx]
test al,2
jnz k37mtr
call pstg
db 'AL,',0
jmp l139b
;
k37mtr: inc curadr
mov bx,curadr
mov al,es:[bx]
call psmnum
call pstg
db ',AL',0
jmp dcrlf
;
kind03: call tabc
mov al,es:[bx]
test al,8
jnz k03mtr
inc pcntr
and al,7
call namrg8
call comma
jmp l139b
;
k03mtr: inc pcntr
inc pcntr
and al,7
call namr16
call comma
pwdval: ;print word value
mov bx,curadr
inc bx
mov dx,es:[bx]
push dx
call symluk
jnb hvsym3
test word ptr sybflg,0ffh
jz nosym3
pop dx
push dx
call addsym
nosym3: pop dx
call pcon16
jmp dcrlf
;
hvsym3: call pstg
db 'OFFSET ',0
call pstrg
pop dx
jmp dcrlf
;
kind04: inc pcntr ;8 bit arith
call tabc
call pstg
db 'AL,',0
l139b: inc curadr
call bytopd
jmp dcrlf
;
bytopd: mov bx,curadr
mov al,es:[bx]
cmp al,' '
jb l13c3
cmp al,'Z'+1
jnb l13c3
mov al,es:[bx]
call pqtchr
mov al,'''' ;27h
call typech ;ending quote
call tabc
call semic
l13c3: mov al,es:[bx]
call psmnum
ret
;
kind05: call tabc ;call/jmp relative address
inc pcntr
inc pcntr
inc bx
mov dx,es:[bx]
inc bx
inc bx
sub bx,curofs
add bx,dx
mov dx,bx
mov opdtyp,0ch ;cs, instruction
call prntde
jmp dcrlf
;
kind06: call tabc
inc pcntr
inc pcntr
call pstg
db 'AX,',0
jmp pwdval
;
opdsy1: push dx
call symluk ;check for symbol
jnb havsym
jmp short mkopds
;
havsym: call pstrg ;display operand symbol
pop dx
ret
;
prtdei: mov bx,curadr
inc bx
mov dx,es:[bx]
prntde: push dx
call symluk ;test for symbol
jnb hvsym2
mkopds: test byte ptr sybflg,0ffh ;building symbols?
jz pmaddr
pop dx
push dx
call addsym
jmp pmaddr
;
hvsym2: call pstrg
test byte ptr trmflg,0ffh
jz cmtadr
pop dx
ret
;
cmtadr: call tabc
call semic
pmaddr: pop dx
pcon16: mov al,dh
or al,dl
mov al,'0' ;30h
jz l147d
mov al,dh
or al,al
jz pcon8
call xo0
mov al,dl
call xo
phxsfx: mov al,'H' ;48h
l147d: call typech
ret
;
pcon8: mov al,dl
psmnum: cmp al,0ah
jb padigt
call xo0
jmp phxsfx
;
padigt: add al,'0' ;30h
jmp l147d
;
kind07: call tabc
inc pcntr
jmp l139b
;
kind08: inc pcntr
jmp dcrlf
;
kind09: mov al,' ' ;lock/rep/repnz
call typech ;space after prfx instr
mov nlblfg,0ffh ;no label betw opcodes
jmp l11b9 ;really continue same instr
;
kind10: call pstg ;xlat opcode
db 9,'AL',0
jmp dcrlf
;
kind11: call pcndop ;conditional jumps
kind21: call tabc ;jcxz/jmps
inc pcntr
mov bx,curadr
inc bx
mov al,es:[bx]
test al,80h ;what sign
jnz k21neg
inc bx
call addfn
jmp k21add
;
k21neg: inc bx
not al
inc al
xor ah,ah
sub bx,ax
k21add: sub bx,curofs
mov dx,bx
mov opdtyp,0ch ;cs, instruction
call prntde
jmp dcrlf
;
kind12: call tabc ;movs/cmps
mov al,es:[bx]
and al,1
jnz k12wrd
call pstg
db 'AL,AL',0
jmp dcrlf
;
k12wrd: call pstg
db 'AX,AX',0
jmp dcrlf
;
kind13: call pstg ;xchg ax with ??
db 9,'AX,',0
mov al,es:[bx]
and al,7
call namr16
jmp dcrlf
;
kind14: call pstg ;unimplemented opcodes
db 'DB',9,'0',0
mov al,es:[bx]
call xo
mov al,'H' ;48h
call typech
jmp dcrlf
;
kind15: call tabc ;one 16 bit register
mov al,es:[bx]
and al,7
call namr16
jmp dcrlf
;
l1552: mov bx,curadr
inc bx
mov al,es:[bx]
and al,7
jmp l156d
;
l155e: mov bx,curadr
inc bx
mov al,es:[bx]
and al,38h
shr al,1
shr al,1
shr al,1
l156d: push ax
mov bx,curadr
mov al,es:[bx]
test al,1
jnz l157c
pop ax
jmp namrg8
;
l157c: pop ax
jmp namr16
;
l1580: mov bx,curadr
inc bx
mov al,es:[bx]
and al,0c0h
cmp al,0
jz l15ba
cmp al,0c0h
jz l1594
jmp l15e0
;
l1594: inc pcntr
mov bx,curadr
mov al,es:[bx]
test al,2
jnz l15ae
call l1552
call comma
call l155e
jmp dcrlf
;
l15ae: call l155e
call comma
call l1552
jmp dcrlf
;
l15ba: inc pcntr
mov bx,curadr
mov al,es:[bx]
test al,2
jnz l15d4
call l1606
call comma
call l155e
jmp dcrlf
;
l15d4: call l155e
call comma
call l1606
jmp dcrlf
;
l15e0: inc pcntr
mov bx,curadr
mov al,es:[bx]
test al,2
jnz l15fa
call l164f
call comma
call l155e
jmp dcrlf
;
l15fa: call l155e
call comma
call l164f
jmp dcrlf
;
l1606: call psgprf ;show segment first
mov bx,curadr
mov al,es:[bx]
test al,1
jnz l1623
call pstg
db 'BYTE PTR ',0
or byte ptr opdtyp,01h ;byte size
jmp l1630
;
l162